package codem;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;

/**
 * 美团在吃喝玩乐等很多方面都给大家提供了便利。最近又增加了一项新业务：小象生鲜。这是新零售超市，你既可以在线下超市门店选购生鲜食品，
 * 也可以在手机App上下单，最快30分钟就配送到家。
 * 新店开张免不了大优惠。我们要在小象生鲜超市里采购n个物品，每个物品价格为ai，有一些物品可以选择八折优惠（称为特价优惠）。
 * 有m种满减优惠方式，满减优惠方式只有在所有物品都不选择特价优惠时才能使用，且最多只可以选择最多一款。
 * 每种满减优惠描述为(bi,ci)，即满bi减ci（当消费>=bi时优惠ci）。
 * 求要买齐这n个物品（必须一单买齐），至少需要多少钱（保留两位小数）。
 * 输入描述:
 * 第一行，两个整数n,m。
 * 接下来n行，每行一个正整数ai，以及一个0/1表示是否可以选择特价优惠（1表示可以）。
 * 接下来m行，每行两个正整数bi,ci，描述一款满减优惠。
 * <p>
 * 1 <= n,m <=10
 * 1 <= ai <= 100
 * 1 <= ci < bi <= 1000
 * 输出描述:
 * 一行一个实数，表示至少需要消耗的钱数（保留恰好两位小数）。
 * 示例1
 * 输入
 * <p>
 * 2 1
 * 6 1
 * 10 1
 * 12 2
 * 输出
 * <p>
 * 12.80
 * 示例2
 * 输入
 * <p>
 * 2 2
 * 6 1
 * 10 1
 * 5 1
 * 16 6
 * 输出
 * <p>
 * 10.00
 */
public class Solution {
    private static BigDecimal calcMinCost(List<Integer[]> items, TreeMap<Integer, Integer> discount) {
        BigDecimal res;
        //计算有优惠的时候，需要花多少钱
        //计算没优惠的时候，需要花多少钱
        BigDecimal specialSum = BigDecimal.ZERO;
        BigDecimal fullSum = BigDecimal.ZERO;
        for (Integer[] item : items) {
            BigDecimal price = new BigDecimal(item[0]);
            int isSpecial = item[1];
            fullSum = fullSum.add(price);
            if (isSpecial == 1) {
                specialSum = specialSum.add(price.multiply(new BigDecimal("0.8")));
            } else {
                specialSum = specialSum.add(price);
            }
        }
//计算满减需要花多少钱
        BigDecimal reductionSum = maxDiscount(discount, fullSum);
        if (specialSum.doubleValue() > reductionSum.doubleValue()) {
            res = reductionSum.setScale(2, RoundingMode.UP);
        } else {
            res = specialSum.setScale(2, RoundingMode.UP);
        }
        return res;
    }

    private static BigDecimal maxDiscount(TreeMap<Integer, Integer> discount, BigDecimal fullSum) {
        int max = Integer.MIN_VALUE;
        for (Map.Entry<Integer, Integer> integerIntegerEntry : discount.entrySet()) {
            if (fullSum.intValue() >= integerIntegerEntry.getKey()) {
                max = Math.max(max, integerIntegerEntry.getValue());
            }
        }
        BigDecimal reductionSum = fullSum.subtract(new BigDecimal(max));
        return reductionSum;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        List<Integer[]> items = new ArrayList<>();
        TreeMap<Integer, Integer> discount = new TreeMap<>();

        for (int i = 0; i < n; i++) {
            Integer[] item = {sc.nextInt(), sc.nextInt()};
            items.add(item);
        }
        for (int i = 0; i < m; i++) {
            discount.put(sc.nextInt(), sc.nextInt());
        }
        BigDecimal res = calcMinCost(items, discount);
        System.out.println(res);
    }

    //public static void main(String[] args) {
    //    List<Integer[]> items = new ArrayList<>();
    //    TreeMap<Integer, Integer> discount = new TreeMap<>();
    //    items.add(new Integer[]{6, 1});
    //    items.add(new Integer[]{10, 1});
    //    discount.put(12, 2);
    //    //discount.put(16, 6);
    //    BigDecimal res = calcMinCost(items, discount);
    //    System.out.println(res);
    //}
}
